#!/usr/bin/env node

/**
 * 此脚本用于修复VS Code的格式化设置
 * 主要解决在某些情况下自动保存时不会自动格式化的问题
 */

import fs from 'fs';
import path from 'path';
import os from 'os';
import { fileURLToPath } from 'url';

// 获取当前文件的目录
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// VS Code设置路径
const vscodeDirPath = path.join(path.resolve(__dirname, '..'), '.vscode');
const settingsPath = path.join(vscodeDirPath, 'settings.json');

// 确保.vscode目录存在
if (!fs.existsSync(vscodeDirPath)) {
  fs.mkdirSync(vscodeDirPath);
}

// 读取当前设置或创建新的设置
let settings = {};
if (fs.existsSync(settingsPath)) {
  try {
    const data = fs.readFileSync(settingsPath, 'utf8');
    settings = JSON.parse(data);
  } catch (error) {
    console.error('读取settings.json失败，将创建新文件', error);
  }
}

// 更新设置
const updatedSettings = {
  ...settings,
  'editor.formatOnSave': true,
  'editor.defaultFormatter': 'esbenp.prettier-vscode',
  'editor.codeActionsOnSave': {
    'source.fixAll.eslint': 'explicit',
  },
  'files.autoSave': 'onFocusChange',
  'prettier.requireConfig': true,
  '[vue]': {
    'editor.defaultFormatter': 'esbenp.prettier-vscode',
  },
  '[javascript]': {
    'editor.defaultFormatter': 'esbenp.prettier-vscode',
  },
  '[typescript]': {
    'editor.defaultFormatter': 'esbenp.prettier-vscode',
  },
  '[json]': {
    'editor.defaultFormatter': 'esbenp.prettier-vscode',
  },
  '[jsonc]': {
    'editor.defaultFormatter': 'esbenp.prettier-vscode',
  },
};

// 保存更新后的设置
try {
  fs.writeFileSync(settingsPath, JSON.stringify(updatedSettings, null, 2) + os.EOL, 'utf8');
  console.log('已成功更新VS Code设置！');
  console.log('请确保已安装以下VS Code扩展:');
  console.log('- ESLint (dbaeumer.vscode-eslint)');
  console.log('- Prettier (esbenp.prettier-vscode)');
  console.log('- Volar (Vue.volar)');
  console.log('- EditorConfig (editorconfig.editorconfig)');
} catch (error) {
  console.error('更新settings.json失败', error);
  console.log('请手动更新.vscode/settings.json文件');
  console.log(JSON.stringify(updatedSettings, null, 2));
}

// 检查editorconfig文件是否存在
const editorConfigPath = path.join(path.resolve(__dirname, '..'), '.editorconfig');
if (!fs.existsSync(editorConfigPath)) {
  console.log('.editorconfig文件不存在，正在创建...');
  const editorConfigContent = `root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
`;

  try {
    fs.writeFileSync(editorConfigPath, editorConfigContent, 'utf8');
    console.log('已成功创建.editorconfig文件！');
  } catch (error) {
    console.error('创建.editorconfig文件失败', error);
  }
}

console.log('设置完成！');
console.log('如果自动保存和格式化仍然不工作，请重新加载VS Code窗口。');
console.log('Command+Shift+P (或 Ctrl+Shift+P) > 重新加载窗口');
